var path = require('path')
var webpack = require('webpack')
var HtmlWebpackPlugin = require('html-webpack-plugin');
var OpenBrowserPlugin = require('open-browser-webpack-plugin');

module.exports = {
    //入口
    entry: path.resolve(__dirname, 'app/index.jsx'),
    //输出
    output: {
        filename: "bundle.js"
    },
    //忽略后缀
    resolve: {
        extensions: ['.js', '.jsx']
    },
    //loaders
    module: {
        rules: [{
            test: /\.(js|jsx)$/,
            loader: 'babel-loader'
        }, {
            test: /\.less$/,
            use: ["style-loader", "css-loader", "less-loader", "postcss-loader"]
        }, {
            test: /\.css$/,
            use: ["style-loader", "css-loader", "postcss-loader"]
        }, {
            test: /\.(png|jpg|gif)$/,
            use: "url-loader?limit=8129"
        }, {
            test: /\.(png|woff|woff2|svg|ttf|eot)($|\?)/i,
            use: "url-loader?limit=5000"
        }]
    },

    plugins: [
        // html 模板插件
        new HtmlWebpackPlugin({
            template: __dirname + '/app/index.tmpl.html'
        }),

        // 热加载插件
        new webpack.HotModuleReplacementPlugin(),

        // 打开浏览器
        new OpenBrowserPlugin({
            url: 'http://localhost:8080'
        }),

        // 可在业务 js 代码中使用 __DEV__ 判断是否是dev模式（dev模式下可以提示错误、测试报告等, production模式不提示）
        new webpack.DefinePlugin({
            __DEV__: JSON.stringify(JSON.parse((process.env.NODE_ENV == 'dev') || 'false'))
        }),

        // 处理postcss和devServer
        new webpack.LoaderOptionsPlugin({
            options: {
                // css3前缀自动加载
                postcss: function() {
                    require('autoprefixer');
                },
                //配置服务器
                devServer: {
                    historyApiFallback: true, //不跳转，在开发单页应用时非常有用，它依赖于HTML5 history API，如果设置为true，所有的跳转将指向index.html
                    inline: true, //实时刷新
                    hot: true // 使用热加载插件 HotModuleReplacementPlugin
                }
            }
        })
    ],

}